gtkwidget: Activate key bindings through run_controllers()
authorCarlos Garnacho <carlosg@gnome.org>
Sun, 11 Mar 2018 12:44:37 +0000 (13:44 +0100)
committerCarlos Garnacho <carlosg@gnome.org>
Thu, 5 Apr 2018 17:26:54 +0000 (19:26 +0200)
Deferring a bit further making those a standalone controller, make
binding activation happen on run_controllers(), so it happens by
default on widgets (unless the key event was consumed earlier)
without the need of a legacy event controller.

gtk/gtkwidget.c

index 24a142e1e91241b73fb647b3177e34e0dc72ff17..3fa0ee6cdc3c70c3ea0e9fb059403c798f57f76b 100644 (file)
@@ -5138,14 +5138,14 @@ static gboolean
 gtk_widget_real_key_press_event (GtkWidget         *widget,
                                 GdkEventKey       *event)
 {
-  return gtk_bindings_activate_event (G_OBJECT (widget), event);
+  return FALSE;
 }
 
 static gboolean
 gtk_widget_real_key_release_event (GtkWidget         *widget,
                                   GdkEventKey       *event)
 {
-  return gtk_bindings_activate_event (G_OBJECT (widget), event);
+  return FALSE;
 }
 
 #define WIDGET_REALIZED_FOR_EVENT(widget, event) \
@@ -5424,6 +5424,11 @@ gtk_widget_event_internal (GtkWidget      *widget,
     return_val |= _gtk_widget_run_controllers (widget, event_copy, GTK_PHASE_BUBBLE);
   g_object_unref (event_copy);
 
+  if (return_val == FALSE &&
+      (event->any.type == GDK_KEY_PRESS ||
+       event->any.type == GDK_KEY_RELEASE))
+    return_val |= gtk_bindings_activate_event (G_OBJECT (widget), (GdkEventKey *) event);
+
   return return_val;
 }